前面幾天都在介紹前端的語言,今天就來講一下後端常用的語言之一
--- PHP
PHP 是一種伺服器端腳本語言,用於開發 Web 應用程式
伺服器端腳本語言意味著它在伺服器上運行,並處理與網站的後端功能相關的任務,例如數據庫查詢、用戶驗證、網頁生成等
通常我們會將 PHP 部屬成網頁,這裡是兩種在本地部屬成網頁執行的方式
XAMPP 下載
開瀏覽器
通常localhost 會對應 xampp/htdocs 的資料夾
要執行的PHP檔可以放裡面,然後瀏覽器開http://localhost/你的檔案.php
或 http://127.0.0.1/你的檔案.php
就可以看到了
Kali 中有內建 php 跟 apache2
啟動 Apache2 : sudo service apache2 start
檢查 Apache 是否正在運行 : sudo service apache2 status
如果 Apache 正在運行,應該會看到類似 "Active: active (running)" 的訊息
關閉 Apache2 : sudo service apache2 stop
php 檔要放在 1
/var/www/html/
底下
http://localhost/你的檔案.php
或 http://127.0.0.1/你的檔案.php
php 的 code 需要被 <?php?>
包起來`
<?php
echo "Hello PHP";
// echo代表將東西印到螢幕上
// 單行註解
/* 多行註解 */
?>
php 的變數要用 $
開頭
<?php
$a = 1;
$b = 2;
$c = $a + $b;
?>
PHP_INT_MAX 可以知道整數最大範圍
var_dump() 可以查看變數資訊
<?php
$a = 123;
$b = 0.123;
$str = 'PHP';
$c = true;
echo "Hello $str <br>";
echo 'Hello $str <br>';
?>
雙引號字串的 $str 可以被解析成變數, 單引號不會,單印號內會被視為普通文字
在 php 中 +
代表數值相加,.
代表字串相接
<?php
$a = "123";
$b = "4";
echo $a+$b; //127
echo "<br>";
echo $a.$b; //1234
?>
== 只有比較值,而 === 會再比較型態
<?php
$a = 5;
$b = "5";
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>
<?php
highlight_file(__FILE__);
$FROM_INCLUDE = true;
include("flag.php");
$msg = "";
if (isset($_GET['user']) && isset($_GET['password'])) {
$user = $_GET['user'];
$password = $_GET['password'];
$check = "QNKCDZO";
// the md5 of "QNKCDZO" is 0e830400451993494058024219903391
if ($user == "admin" && $password != $check && md5($password) == md5($check)) {
$msg = "Flag: ".$flag;
} else {
$msg = "Keep trying!";
}
}
echo $msg;
?>
php 只用==可以當數字處裡,0e開頭的數字都會被視為0
所以只要找到md5後值也是0e開頭的就可以繞過驗證
直接用範例來看 !
根據現在幾點顯示 Good morning! 、 Good afternoon! 、 Good night!
<?php
date_default_timezone_set("Asia/Taipei"); //設定時區
$t = date("H"); //獲取當前時間幾點
if("6" <= $t && $t < "12"){
echo "Good morning!";
}
elseif("12" <= $t && $t < "18"){
echo "Good afternoon!";
}
else{
echo "Good night!";
}
?>
<?php
$i = 1;
while($i <= 5){
echo $i++;
}
?>
$j = 1;
do{
echo $j++;
}while($j <= 5);
for($k = 1; $k <= 5; $k++){
if($k == 5){
break;
}
elseif($k == 3){
continue;
}
echo $k;
}
$num = array(1, 2, 3, 4, 5);
//$num[] = 12;
//兩種宣告陣列方式
foreach($num as $n){
echo "$n";
}
超级全域變數 | 用途 |
---|---|
$_GET |
用於獲取透過 HTTP GET 請求傳遞的參數 |
$_POST |
用於獲取透過 HTTP POST 請求傳遞的參數 |
$_REQUEST |
包含了 $_GET 、$_POST 和 $_COOKIE 的內容,可用於獲取 HTTP 請求中的參數 |
$_SESSION |
用於在不同頁面之間存儲session資料 |
$_COOKIE |
用於訪問通過 HTTP 請求發送到使用者端的 Cookie 資料 |
$_SERVER |
包含了有關伺服器和腳本的信息,如請求的 URL、伺服器的 IP 地址等 |
$_ENV |
用於獲取環境變數的值,通常由伺服器配置或操作系統設定 |
$_GLOBALS |
用於訪問全域作用域中的變數,這是一個包含全域變數的關聯數組 |
<?php
if(isset($_GET['user'])){ //確認有沒有資料
$name = $_GET['user']; //從?user得到資料
echo "Hello, $name";
}
else echo "Who are you?";
?>
session_start(); // 啟動session
$_SESSION['user_id'] = 123; // 儲存 user ID
<?php
echo $_SERVER['PHP_SELF']; //回傳當前正在執行的檔案名稱
echo "<br>";
echo $_SERVER['SERVER_NAME']; //回傳正在執行腳本的伺服器主機名稱
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT']; //確定訪問網站的瀏覽器和作業系統
echo "<br>";
echo $_SERVER['SCRIPT_NAME']; //目前正在執行的檔案的相對路徑
?>
$home_directory = $_ENV['HOME'];